#ifndef Matrix_h
#define Matrix_h

/// The PI Number
const float PI_NUMBER = 3.14159265358979323846f;

/// The Common interface for Matrix 
class Matrix
{
public:
    // value of Matrix
    float value[16];

    // Create an default Matrix
    Matrix();

    void Reset();
    // multiply a matrix
    void Multiply(const Matrix &a);

    // add a matrix
    void Add(const Matrix &a);

    // rotate a transform matrix arround x
    void RotateX(float alpha);

    // rotate a transform matrix arround y
    void RotateY(float alpha);

    // rotate a transform matrix arround z
    void RotateZ(float alpha);

    // translate a transform matrix
    void Translate(float x, float y, float z);

    // scale a transform matrix 
    void Scale(float x, float y, float z);
  
    // get OrthGraphics
    void LoadOrthoGraphics(float left, float right, float bottom, float top, float near, float far);

    // Set Perfective

    void LoadPerperstive(float fovy, float aspect, float zNear, float zFar);

    void Print();

	// Multiply Matrix
    Matrix operator*(const Matrix &matrix);

    // Multiply operator
    Matrix &operator*=(const Matrix &matrix);

};
#endif